package issr.market.utils;

import issr.market.init.Configuration;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;

import org.displaytag.decorator.DisplaytagColumnDecorator;

public class Utils {
	
	public static String escapeForDB(String value){
		return value.replace("'", "\'");
	}
	
	public static boolean validateMail(String value){
		
		return value.matches("");
	}
	
	public static boolean validateLogin(String value){
		return true;
	}
	
	public static boolean validatePassword(String value){
		return true;
	}
	
	public static boolean validateNome(String value){
		return true;
	}
	
	public static String encrypt(String password){
		try{
            MessageDigest m = MessageDigest.getInstance("MD5");
            m.update(password.getBytes());
            return String.format("%032x",new BigInteger(1,m.digest()));
        }
        catch(Exception e){
            return null;
        }
	}
	
	public static String numRuoloToString(int ruolo){
		
		switch(ruolo){
			case Constants.NUM_RUOLO_ADMIN_GENERALE:
				return Constants.RUOLO_ADMIN_GENERALE;
			case Constants.NUM_RUOLO_ADMIN_LOCALE:
				return Constants.RUOLO_ADMIN_LOCALE;
			case Constants.NUM_RUOLO_ADDETTO_RECLAMI:
				return Constants.RUOLO_ADDETTO_RECLAMI;
			case Constants.NUM_RUOLO_ANALISTA_INDICI:
				return Constants.RUOLO_ANALISTA_INDICI;
			case Constants.NUM_RUOLO_GESTORE_CREDENZIALI:
				return Constants.RUOLO_GESTORE_CREDENZIALI;
			case Constants.NUM_RUOLO_MAGAZZINIERE:
				return Constants.RUOLO_MAGAZZINIERE;
			case Constants.NUM_RUOLO_OPERATORE_BANCO:
				return Constants.RUOLO_OPERATORE_BANCO;
			default: 
				return null;
		}
	}
	
	public static String redirectRole(int ruolo){

		switch (ruolo) {
		
		case Constants.NUM_RUOLO_ADMIN_GENERALE:
			return "adminGenerale";
		
		case Constants.NUM_RUOLO_ADMIN_LOCALE:
			return "adminLocale";
		
		case Constants.NUM_RUOLO_ADDETTO_RECLAMI:
			return "addettoReclami";
		
		case Constants.NUM_RUOLO_ANALISTA_INDICI:
			return "analistaIndici";
		
		case Constants.NUM_RUOLO_GESTORE_CREDENZIALI:
			return "gestoreCredenziali";
		
		case Constants.NUM_RUOLO_MAGAZZINIERE:
			return "magazziniere";
		
		case Constants.NUM_RUOLO_OPERATORE_BANCO:
			return "operatoreBanco";
		
		default:
			return "login";
			
		}
	}
	
	
	public static String getRicevutaHeaderKeys(){
		return Utils.commatize(Configuration.ricevutaHeaderKeysList);
	}
	
	public static String getRicevutaContentKeys(){
		return Utils.commatize(Configuration.ricevutaContentKeysList);
	}

	
	public static String commatize(List<String> l){
		return commatize(l, false);
	}
	
	public static String commatize(List<String> l, boolean isString) {
		String wrapper = "";
		char ch = ',';
		if (l == null) {
			return null;
		}
		if(isString) wrapper = "'";
		StringBuffer sb = new StringBuffer();
		for (String s : l) {
			sb.append(wrapper);
			sb.append(s);
			sb.append(wrapper);
			sb.append(ch);
		}
		Utils.removeLastChar(sb);
		return sb.toString();
	}

	public static List<String> decommatize(String commated) {
		if (commated == null) {
			return null;
		}
		char ch = ',';
		List<String> l = new ArrayList<String>();
		String[] split = commated.split("" + ch);
		for (String s : split) {
			l.add(s.trim());
		}
		return l;
	}
	
	public static void removeLastChar(StringBuffer sb) {
		if (sb.length() > 0)
			sb.deleteCharAt(sb.length() - 1);
	}
	
	public static DisplaytagColumnDecorator getDecoratorByProperty(String key) {
		DisplaytagColumnDecorator dec = null;
		try {			
			String className = Configuration.prop.getString(key);
			if (className!=null)
				dec = (DisplaytagColumnDecorator) Class.forName("issr.market.decorators." + className).newInstance();
		} catch (Exception e) {
			dec = null;
		}
		return dec;
	}
	
	public static String generateSetterForPrefix(String prefix){
		return "set"+prefix.substring(0,1).toUpperCase()+prefix.substring(1);
	}
	
	public static String generateGetterForPrefix(String prefix){
		return "get"+prefix.substring(0,1).toUpperCase()+prefix.substring(1);
	}
	

}
